import { isFunctionDeclaration, isIdentifier, Node, isObjectMethod, isExportDefaultDeclaration } from '@babel/types';

/**
 * 获取函数名
 */
export function getFunctionName(n: Node) {
    let name = null;
    if (isFunctionDeclaration(n)) {
        if (isIdentifier(n.id)) {
            name = n.id.name;
        }

        // @ts-ignore
    } else if (isObjectMethod(n) || n.type === 'Property') {
        if (isIdentifier(n.key)) {
            name = n.key.name;
        }
    } else if (isExportDefaultDeclaration(n)) {
        if (isFunctionDeclaration(n.declaration)) {
            if (n.declaration.id) {
                name = n.declaration.id.name;
            } else {
                name = '';
            }
        }
    }
    return name || 'default';
}
